﻿using System.Collections.Generic;
using System.Linq;
using System.Diagnostics;
using BReusable.Containers;

namespace StarfleetCommanderDomain.Game
{
    public class TechContainer : EspItemContainer<Tech>
    {
        private const string STR_LaserTech = "Laser Tech";
        private const string STR_ArmorTech = "Armor Tech";
        private const string STR_WeaponsTech = "Weapons Tech";
        private const string STR_ShieldTech = "Shield Tech";
        private const string STR_ParticleTech = "Particle Tech";
        private const string STR_JetDrive = "Jet Drive";
        private const string STR_AITech = "A.I. Tech";
        private const string STR_EnergyTech = "Energy Tech";
        private const string STR_EspionageTech = "Espionage Tech";
        private const string STR_PulseDrive = "Pulse Drive";
        private const string STR_PlasmaTech = "Plasma Tech";
        private const string STR_FTLTech = "FTL Tech";
        private const string STR_ExpeditionTech = "Expedition Tech";
        private const string STR_WarpDrive = "Warp Drive";
        private const string STR_AdvancedResearchCommunicationNetwork = "Advanced Research Communication Network";

        public IEnumerable<string> Techs = new string[]
        { 
        STR_LaserTech , 
        STR_ArmorTech , 
        STR_WeaponsTech, 
        STR_ShieldTech ,
        STR_ParticleTech,
        STR_JetDrive,
        STR_AITech,
        STR_EnergyTech ,
        STR_EspionageTech,
        STR_PulseDrive ,
        STR_PlasmaTech,
        STR_FTLTech,
        STR_ExpeditionTech,
        STR_WarpDrive ,
        STR_AdvancedResearchCommunicationNetwork
        };

        public TechContainer(LambdaDictionary<string, Tech> values)
            : base(values)
        {
            foreach (var value in values)
            {
                Debug.Assert(Techs.Contains(value.Key));

            }
        }

        
        public Tech Laser { get { return GetItemIfExists(STR_LaserTech); } }

        public Tech Armor { get { return GetItemIfExists(STR_ArmorTech); } }

        public Tech Weapons { get { return GetItemIfExists(STR_WeaponsTech); } }

        public Tech Shield { get { return GetItemIfExists(STR_ShieldTech); } }

        public Tech Particle { get { return GetItemIfExists(STR_ParticleTech); } }

        public Tech Jet { get { return GetItemIfExists(STR_JetDrive); } }

        public Tech AI { get { return GetItemIfExists(STR_AITech); } }

        public Tech Energy { get { return GetItemIfExists(STR_EnergyTech); } }

        public Tech Espionage { get { return GetItemIfExists(STR_EspionageTech); } }

        public Tech Pulse { get { return GetItemIfExists(STR_PulseDrive); } }

        public Tech Plasma { get { return GetItemIfExists(STR_PlasmaTech); } }

        public Tech FTL { get { return GetItemIfExists(STR_FTLTech); } }

        public Tech Expedition { get { return GetItemIfExists(STR_ExpeditionTech); } }

        public Tech Warp { get { return GetItemIfExists(STR_WarpDrive); } }

        public Tech ARCN { get { return GetItemIfExists(STR_AdvancedResearchCommunicationNetwork); } }
       
    }
}
